package com.topdt.jbpm.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**  
 *  @Project       : saasoa
 *  @Program Name  : com.topdt.jbpm.utils.MatchUtil.java
 *  @Class Name    : MatchUtil
 *  @Description   : 匹配工具类
 *  @Author        : calonlan
 *  @Creation Date : 2014年12月8日 下午6:37:14 
 *  @ModificationHistory  
 *  Who        When          What 
 *  --------   ----------    -----------------------------------
 *  username   2014年12月8日       TODO
 */
public class MatchUtil {
	private final static Log log = LogFactory.getLog(MatchUtil.class);
	
	
	/** 
	 *  @Description    : 主要用于数量区间的匹配,支持的运算符包括：">","<","=",">=","<="
	 *  @Method_Name    : intervalMatch
	 *  @param key 匹配关键字
	 *  @param val 匹配关键字的值		
	 *  @param str 匹配字符串表达式
	 *  @return 
	 *  @return         : boolean
	 *  @Creation Date  : 2014年12月8日 下午6:41:59 
	 *  @version        : v1.00
	 *  @Author         : calonlan
	 
	 *  @Update Date    : 
	 *  @Update Author  : 
	 */
	public static boolean intervalMatch(String key, float val, String str) {
		log.info("intervalMatch()");
        System.out.println(key);
        int index = str.indexOf(key);
        int length = str.length();
        boolean result = false;
    	//左半区间
        if(index == 0) {
        	//形如:day<=5
        	if(str.indexOf("<") > 0) {
        		String temp = str.substring(str.indexOf("<")+1,str.indexOf("<")+2);
        		if("=".equals(temp)) {
        			if(val <= Integer.valueOf(str.substring(str.indexOf("<")+2))) {
            			//出口
//        				System.out.println("左半区间:"+val+"<="+Integer.valueOf(str.substring(str.indexOf("<")+2)));
        				return true;
            		}
        		} else {
        			if(val < Integer.valueOf(str.substring(str.indexOf("<")+1))) {
            			//出口
//        				System.out.println("左半区间:"+val+"<"+Integer.valueOf(str.substring(str.indexOf("<")+1)));
        				return true;
            		}
        		}
    		} else if(str.indexOf(">") > 0) {
    			//形如：day>=3	
        		String temp = str.substring(str.indexOf(">")+1,str.indexOf(">")+2);
        		if("=".equals(temp)) {
        			if(val >= Integer.valueOf(str.substring(str.indexOf(">")+2))) {
            			//出口
//        				System.out.println("左半区间:"+val+">="+Integer.valueOf(str.substring(str.indexOf(">")+2)));
        				return true;
            		}
        		} else {
        			if(val > Integer.valueOf(str.substring(str.indexOf(">")+1))) {
            			//出口
//        				System.out.println("左半区间:"+val+">"+Integer.valueOf(str.substring(str.indexOf(">")+1)));
        				return true;
            		}
        		}
        	} else {
        		//形如:day=3
        		if(val == Integer.valueOf(str.substring(str.indexOf("=")+1))) {
        			//出口
//        			System.out.println("左半区间:"+val+"="+Integer.valueOf(str.substring(str.indexOf("=")+1)));
        			return true;
        		}
        	}
        //右半区间
        } else if(index+key.length() == length) {
        	//形如:3<=day
      		if(str.indexOf("<") > 0) {
      			String temp = str.substring(str.indexOf("<")+1, str.indexOf("<")+2);
    			if("=".equals(temp)) {
    				if(val >= Integer.valueOf(str.substring(0, str.indexOf("<")))) {
    					//出口
//    					System.out.println("右半区间:"+val+">="+Integer.valueOf(str.substring(0, str.indexOf("<"))));
    					return true;
    				} 
    			} else {
    				if(val > Integer.valueOf(str.substring(0, str.indexOf("<")))) {
    					//出口
//    					System.out.println("右半区间:"+val+">"+Integer.valueOf(str.substring(0, str.indexOf("<"))));
    					return true;
    				}
    			}
    		} else if(str.indexOf(">") > 0) {
    			//形如：5>=day
    			String temp = str.substring(str.indexOf(">")+1, str.indexOf(">")+2);
    			if("=".equals(temp)) {
    				if(val <= Integer.valueOf(str.substring(0, str.indexOf(">")))) {
    					//出口
//    					System.out.println("右半区间:"+val+"<="+Integer.valueOf(str.substring(0, str.indexOf(">"))));
    					return true;
    				} 
    			} else {
    				if(val < Integer.valueOf(str.substring(0,str.indexOf(">")))) {
    					//出口
//    					System.out.println("右半区间:"+val+"<"+Integer.valueOf(str.substring(0, str.indexOf(">"))));
    					return true;
    				}
    			}
    		} else {
    			//形如:5=day
    			if(val == Integer.valueOf(str.substring(0, str.indexOf("=")))) {
        			//出口
//    				System.out.println("右半区间:"+val+"="+Integer.valueOf(str.substring(0, str.indexOf("="))));
    				return true;
        		}
    		}
        	
      	} else {
          	//全部区间
      		int i = 0;
      		//形如：3<day<5
          	if(str.indexOf("<") > 0) {
          		//第一个"<"
    			if(val > Integer.valueOf(str.substring(0, str.indexOf("<")))) {
        			//
    				i++;
        		}
    			//第一个"="
    			if("=".equals(str.substring(str.indexOf("<")+1, str.indexOf("<")+2))) {
    				if(val == Integer.valueOf(str.substring(0, str.indexOf("<")))) {
        				//
        				i++;
        			}
    			}
    			//判断有没有第二个"="
    			String temp = str.substring(str.lastIndexOf("<")+1, str.lastIndexOf("<")+2);
    			if("=".equals(temp)) {
    				if(val <= Integer.valueOf(str.substring(str.lastIndexOf("<")+2))) {
        				i++;
        			}
    			} else {
    				if(val < Integer.valueOf(str.substring(str.lastIndexOf("<")+1))) {
        				i++;
        			}
    			}
    			
    		} else {
    			//形如:3>=day>=5
    			//第一个"<"
    			if(val < Integer.valueOf(str.substring(0, str.indexOf(">")))) {
        			//
    				i++;
        		}
    			//第一个"="
    			if("=".equals(str.substring(str.indexOf(">")+1, str.indexOf(">")+2))) {
    				if(val == Integer.valueOf(str.substring(0, str.indexOf(">")))) {
        				//
        				i++;
        			}
    			}
    			//判断有没有第二个"="
    			String temp = str.substring(str.lastIndexOf(">")+1, str.lastIndexOf(">")+2);
    			if("=".equals(temp)) {
    				if(val >= Integer.valueOf(str.substring(str.lastIndexOf(">")+2))) {
        				i++;
        			}
    			} else {
    				if(val > Integer.valueOf(str.substring(str.lastIndexOf(">")+1))) {
        				i++;
        			}
    			}
    		}  
        	
        	if(i == 2) {
//        		System.out.println("全部区间:");
        		return true;
        	}
        	System.out.println("i:"+i);
      	}
		return result;
    }

}
